// Step 1: 加载上传到 GEE 的点数据
var points = RiceFJ;

// Step 2: 定义哨兵2号的 NDVI 计算函数
function calculateNDVI(image) {
  var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI'); // (NIR - RED) / (NIR + RED)
  return image.addBands(ndvi);
}

// Step 3: 获取 Sentinel-2 数据，并进行云掩膜和 NDVI 计算
var s2Collection = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
                      .filterBounds(points) // 限制在点的范围内
                      .filterDate('2022-01-01', '2022-12-31') // 限制时间范围
                      .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) // 去除云量较大的影像
                      .map(calculateNDVI);

// Step 4: 定义时间范围，按每月进行分组
var months = ee.List.sequence(1, 12);
var year = 2022; // 定义年份

// Step 5: 创建每个点的 NDVI 表
var pointsWithNDVI = points.map(function(point) {
  // 初始化点的特性
  var feature = ee.Feature(point);
  
  // 遍历每个月份
  months.getInfo().forEach(function(m) {
    var start = ee.Date.fromYMD(year, m, 1);
    var end = start.advance(1, 'month');
    var monthlyComposite = s2Collection.filterDate(start, end).median(); // 取每月的中位数影像
    var ndvi = monthlyComposite.select('NDVI'); // 获取 NDVI 波段

    // 计算当前点的 NDVI 值
    var ndviValue = ndvi.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: point.geometry(),
      scale: 10
    }).get('NDVI');

    // 设置每月的 NDVI 值，字段名为 "Month_1", "Month_2", ...
    feature = feature.set('Month_' + m, ndviValue);
  });
  
  return feature;
});

// 转换为 FeatureCollection
pointsWithNDVI = ee.FeatureCollection(pointsWithNDVI);
print(pointsWithNDVI, 'Points with Monthly NDVI');

// Step 6: 导出每点的 1-12 月 NDVI 表
Export.table.toDrive({
  collection: pointsWithNDVI,
  description: 'Points_Monthly_NDVI',
  fileFormat: 'CSV',
  folder: 'GEE_Exports'
});

// 可视化点数据
Map.centerObject(points, 10);
Map.addLayer(points, {color: 'red'}, 'Points');
